<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>构造函数</title>
</head>
<body>
    
</body>
</html>

<script>

    /*构造函数 和工厂函数一样都是用于创建对象
     *构造函数的首字母大写符合Pascal命名对象
     *this指代的是当前创建的对象
     *不需要返回this,因为系统会自动完成
     *使用new关键字生成对象
    */

    // function Student(name){
    //     this.name = name;
    //     this.show = function(){
    //         console.log(this.name)
    //     }
    //     //这边的this是不需要进行返回的，因为系统会自动返回
    //     // return this;
    // }
    // const lisi = new Student('李四');
    // lisi.show();
    // const xj = new Student('向军');
    // xj.show();


    //如果构造函数返回对象，实例化后的对象是此对象
    // function ArrayObject(...values){
    //     const arr = new Array();
    //     arr.push.apply(arr,values);
    //     //将数组转化为字符串的方法
    //     arr.string = function(sym = "|"){
    //         //this指代的是arr
    //         return this.join(sym)
    //     }
    //     return arr;
    // }
    // const array = new ArrayObject(1,2,3);
    // console.log(array.string())
    

    //严格模式
    // "use strict"
    // //匿名函数单独调取的话 是window对象  
    // function User(){
    //     this.show = function(){
    //         console.log(this)
    //     }
    // }
    // let hd = new User();
    // hd.show();

    // let xj = hd.show;
    // xj();


    //内置构造
    //js的大部分数据类型都是通过构造函数创建的
    // const num = new Number(99);
    // console.log(num.valueOf());

    // const string = new String("后盾人");
    // console.log(string.valueOf());

    // const boolean = new Boolean(true);
    // console.log(boolean.valueOf());

    // const date = new Date();
    // console.log(date.valueOf() * 1)

    // const redexp = new RegExp("\\d+");
    // console.log(redexp);

    // let hd = new Object();
    // hd.name = "后盾人";
    // console.log(hd)


    //字面量创建对象，内部也是调用了Object构造函数
    // const hd = {
    //     name : "后盾人"
    // };
    // console.log(hd.constructor)

    // //下面使用构造函数创建对象
    // const hdcms = new Object();
    // hdcms.title = "开源系统管理";
    // console.log(hdcms);


    //对象函数
    //在js中，函数也是一个对象
    // function hd(name,age){

    // }
    // console.log(hd.toString())
    // console.log(hd.length);

    //函数系统内置的Function构造函数创建的
    // function hd(name){

    // }

    // console.log(hd.constructor);

    //下面是使用内置构造函数创建的函数
    const User = new Function(`name`,`
        this.name = name;
        this.show = function(){
            return this.name;
        }
    `);
    const lisi = new User("李四");
    console.log(lisi.show())

</script>